﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда
		
		Элементы.НепроведенныеДокументыКонтекстноеМеню.ПодчиненныеЭлементы.НепроведенныеДокументыКонтекстноеМенюИзменитьВыделенныеДокументы.Видимость = Ложь;
		Элементы.НепроведенныеДокументыИзменитьВыделенныеДокументы.Видимость = Ложь;
		Элементы.НезаполненныеРеквизитыКонтекстноеМеню.ПодчиненныеЭлементы.НезаполненныеРеквизитыКонтекстноеМенюИзменитьВыделенныеОбъекты.Видимость = Ложь;
		Элементы.НезаполненныеРеквизитыИзменитьВыделенныеОбъекты.Видимость = Ложь;
		
	КонецЕсли;
	
	ИспользуетсяДатыЗапретаИзменения = 
		ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения");
	
	ИспользуетсяВерсионирование = ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(, Истина);
	
	Если ИспользуетсяВерсионирование Тогда
		
		МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
		МодульВерсионированиеОбъектов.ИнициализацияДинамическогоСпискаПроблемныхВерсий(Коллизии, "Коллизии");
		
		Если ИспользуетсяДатыЗапретаИзменения Тогда
			МодульВерсионированиеОбъектов.ИнициализацияДинамическогоСпискаПроблемныхВерсий(НепринятыеПоДате, "НепринятыеПоДате");
		КонецЕсли;
		
	КонецЕсли;
	
	Элементы.СтраницаКоллизии.Видимость                = ИспользуетсяВерсионирование;
	Элементы.СтраницаНепринятыеПоДатеЗапрета.Видимость = ИспользуетсяВерсионирование И ИспользуетсяДатыЗапретаИзменения;
	
	// Устанавливаем отборы динамических списков и сохраняем их в реквизите для управления ими.
	НастройкиОтборовДинамическихСписков = НастройкиОтборовДинамическихСписков();
	
	Если ОбщегоНазначения.РазделениеВключено() И ИспользуетсяВерсионирование Тогда
		Элементы.КоллизииАвторДругойВерсии.Заголовок = НСтр("ru = 'Версия получена из приложения'");
	КонецЕсли;
	
	ЗаполнитьСписокУзлов();
	ОбновитьОтборыИПроигнорированные();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОбновитьОтображениеПодробногоОписанияПроблемы();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	Если ЗавершениеРаботы Тогда
		Возврат;
	КонецЕсли;
	
	Оповестить("ЗакрытаФормаРезультатовОбменаДанными");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	ОбновитьНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
	
	ОбновитьОтборыИПроигнорированные();
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СтрокаПоискаПриИзменении(Элемент)
	
	ОбновитьОтборПоПричине();
	
КонецПроцедуры

&НаКлиенте
Процедура ПериодПриИзменении(Элемент)
	
	ОбновитьОтборПоПериоду();
	
КонецПроцедуры

&НаКлиенте
Процедура УзелИнформационнойБазыОчистка(Элемент, СтандартнаяОбработка)
	
	УзелИнформационнойБазы = Неопределено;
	ОбновитьОтборПоУзлу();
	
КонецПроцедуры

&НаКлиенте
Процедура УзелИнформационнойБазыПриИзменении(Элемент)
	
	ОбновитьОтборПоУзлу();
	
КонецПроцедуры

&НаКлиенте
Процедура УзелИнформационнойБазыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	Если Не Элементы.УзелИнформационнойБазы.РежимВыбораИзСписка Тогда
		
		СтандартнаяОбработка = Ложь;
		
		Обработчик = Новый ОписаниеОповещения("УзелИнформационнойБазыНачалоВыбораЗавершение", ЭтотОбъект);
		Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
		ОткрытьФорму("ОбщаяФорма.ВыборУзловПлановОбмена",,,,,, Обработчик, Режим);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УзелИнформационнойБазыНачалоВыбораЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
	
	УзелИнформационнойБазы = РезультатЗакрытия;
	ОбновитьОтборПоУзлу();
	
КонецПроцедуры

&НаКлиенте
Процедура УзелИнформационнойБазыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	УзелИнформационнойБазы = ВыбранноеЗначение;
	
КонецПроцедуры

&НаКлиенте
Процедура РезультатыОбменаДаннымиПриСменеСтраницы(Элемент, ТекущаяСтраница)
	
	Если ТекущаяСтраница = Элементы.СтраницаКоллизии Тогда
		Элементы.СтрокаПоиска.Доступность = Ложь;
	Иначе
		Элементы.СтрокаПоиска.Доступность = Истина;
	КонецЕсли;
	
	ОбновитьОтображениеПодробногоОписанияПроблемы();
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыНепроведенныеДокументы

&НаКлиенте
Процедура НепроведенныеДокументыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОткрытьОбъект(Элементы.НепроведенныеДокументы);
	
КонецПроцедуры

&НаКлиенте
Процедура НепроведенныеДокументыПередНачаломИзменения(Элемент, Отказ)
	
	ИзменениеОбъекта();
	Отказ = Истина;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыНезаполненныеРеквизиты

&НаКлиенте
Процедура НезаполненныеРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОткрытьОбъект(Элементы.НезаполненныеРеквизиты);
	
КонецПроцедуры

&НаКлиенте
Процедура НезаполненныеРеквизитыПередНачаломИзменения(Элемент, Отказ)
	
	ИзменениеОбъекта();
	Отказ = Истина;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыОшибкиXDTO

&НаКлиенте
Процедура ОшибкиОбъектаXDTOВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОткрытьОбъект(Элементы.ОшибкиОбъектаXDTO);

КонецПроцедуры

&НаКлиенте
Процедура ОшибкиОбъектаXDTOПередНачаломИзменения(Элемент, Отказ)
	
	ИзменениеОбъекта();
	Отказ = Истина;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыКоллизии

&НаКлиенте
Процедура КоллизииПередНачаломИзменения(Элемент, Отказ)
	
	ИзменениеОбъекта();
	Отказ = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура КоллизииПриАктивизацииСтроки(Элемент)
	
	Если Элемент.ТекущиеДанные <> Неопределено Тогда
		
		Если Элемент.ТекущиеДанные.ДругаяВерсияПринята Тогда
			
			ПричинаКонфликта = НСтр("ru = 'Конфликт был разрешен автоматически в пользу программы ""%1"".
				|Версия в этой программе была заменена на версию из другой программы.'");
			ПричинаКонфликта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаКонфликта, Элемент.ТекущиеДанные.АвторДругойВерсии);
			
		Иначе
			
			ПричинаКонфликта =НСтр("ru = 'Конфликт был разрешен автоматически в пользу этой программы.
				|Версия в этой программе была сохранена, версия из другой программы была отклонена.'");
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыНепринятыПоДате

&НаКлиенте
Процедура НепринятыеПоДатеПередНачаломИзменения(Элемент, Отказ)
	
	ИзменениеОбъекта();
	Отказ = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура НепринятыеПоДатеПриАктивизацииСтроки(Элемент)
	
	СвязанныеЭлементы = Новый Массив; // Массив из ГруппаФормы, КнопкаФормы
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеСравнитьСДаннымиВБазе);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеПринятьВерсию);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеИзменить);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеОткрытьВерсию);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеИгнорироватьНепринятый);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеНеИгнорироватьНепринятый);
	
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеКонтекстноеМенюСравнитьСДаннымиВБазе);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеКонтекстноеМенюПринятьВерсию);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеКонтекстноеМенюИзменить);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеКонтекстноеМенюОткрытьВерсиюНепринятыеВЭтойПрограмме);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеКонтекстноеМенюОткрытьВерсию);
	СвязанныеЭлементы.Добавить(Элементы.НепринятыеПоДатеКонтекстноеМенюГруппаИгнорирования);
	
	Для Каждого СвязанныйЭлемент Из СвязанныеЭлементы Цикл
		СвязанныйЭлемент.Доступность = (Элемент.ТекущиеДанные <> Неопределено);
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыОшибкиПриВыполненииКодаОбработчиковОтправки

&НаКлиенте
Процедура ОшибкиПриВыполненииКодаОбработчиковОтправкиПередНачаломИзменения(Элемент, Отказ)
	
	ИзменениеОбъекта();
	Отказ = Истина;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыОшибкиПриВыполненииКодаОбработчиковОтправки

&НаКлиенте
Процедура ОшибкиПриВыполненииКодаОбработчиковПолученияПередНачаломИзменения(Элемент, Отказ)
	
	ИзменениеОбъекта();
	Отказ = Истина;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ПоказатьИнформациюДляТехническихСпециалистов(Команда)
	
	ПараметрыОтбораЖурнала = ПодготовитьОтборыЖурналаРегистрации();
	ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыОтбораЖурнала, ЭтотОбъект,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура Изменить(Команда)
	
	ИзменениеОбъекта();
	
КонецПроцедуры

&НаКлиенте
Процедура ИгнорироватьДокумент(Команда)
	
	Игнорировать(Элементы.НепроведенныеДокументы.ВыделенныеСтроки, Истина, "НепроведенныеДокументы");
	
КонецПроцедуры

&НаКлиенте
Процедура НеИгнорироватьДокумент(Команда)
	
	Игнорировать(Элементы.НепроведенныеДокументы.ВыделенныеСтроки, Ложь, "НепроведенныеДокументы");
	
КонецПроцедуры

&НаКлиенте
Процедура НеИгнорироватьОбъект(Команда)
	
	Игнорировать(Элементы.НезаполненныеРеквизиты.ВыделенныеСтроки, Ложь, "НезаполненныеРеквизиты");
	
КонецПроцедуры

&НаКлиенте
Процедура ИгнорироватьОбъект(Команда)
	
	Игнорировать(Элементы.НезаполненныеРеквизиты.ВыделенныеСтроки, Истина, "НезаполненныеРеквизиты");
	
КонецПроцедуры

&НаКлиенте
Процедура НеИгнорироватьОшибку(Команда)
	
	Игнорировать(Элементы.ОшибкиОбъектаXDTO.ВыделенныеСтроки, Ложь, "ОшибкиОбъектаXDTO");
	
КонецПроцедуры

&НаКлиенте
Процедура ИгнорироватьОшибку(Команда)
	
	Игнорировать(Элементы.ОшибкиОбъектаXDTO.ВыделенныеСтроки, Истина, "ОшибкиОбъектаXDTO");
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьВыделенныеДокументы(Команда)
	
	ИзменитьВыделенные(Элементы.НепроведенныеДокументы);
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьВыделенныеОбъекты(Команда)
	
	ИзменитьВыделенные(Элементы.НезаполненныеРеквизиты);
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьВыделенныеОшибкиПроверки(Команда)
	
	ИзменитьВыделенные(Элементы.ОшибкиОбъектаXDTO);
	
КонецПроцедуры

&НаКлиенте
Процедура Обновить(Команда)
	
	ОбновитьНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОчиститьСообщения();
	
	СообщениеОбОшибке = "";
	ПровестиДокументы(Элементы.НепроведенныеДокументы.ВыделенныеСтроки, СообщениеОбОшибке);
	Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
		ПоказатьПредупреждение(, СообщениеОбОшибке);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьОтличияНепринятые(Команда)
	
	ПоказатьОтличия(Элементы.НепринятыеПоДате);
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьВерсиюНепринятые(Команда)
	
	Если Элементы.НепринятыеПоДате.ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	СравниваемыеВерсии = Новый Массив;
	СравниваемыеВерсии.Добавить(Элементы.НепринятыеПоДате.ТекущиеДанные.НомерДругойВерсии);
	ОткрытьОтчетСравненияВерсий(Элементы.НепринятыеПоДате.ТекущиеДанные.Ссылка, СравниваемыеВерсии);
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьВерсиюНепринятыеВЭтойПрограмме(Команда)
	
	Если Элементы.НепринятыеПоДате.ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	СравниваемыеВерсии = Новый Массив;
	СравниваемыеВерсии.Добавить(Элементы.НепринятыеПоДате.ТекущиеДанные.НомерЭтойВерсии);
	ОткрытьОтчетСравненияВерсий(Элементы.НепринятыеПоДате.ТекущиеДанные.Ссылка, СравниваемыеВерсии);

КонецПроцедуры

&НаКлиенте
Процедура ПоказатьОтличияКоллизии(Команда)
	
	ПоказатьОтличия(Элементы.Коллизии);
	
КонецПроцедуры

&НаКлиенте
Процедура ИгнорироватьКонфликт(Команда)
	
	ИгнорироватьВерсию(Элементы.Коллизии.ВыделенныеСтроки, Истина, "Коллизии");
	
КонецПроцедуры

&НаКлиенте
Процедура ИгнорироватьНепринятый(Команда)
	
	ИгнорироватьВерсию(Элементы.НепринятыеПоДате.ВыделенныеСтроки, Истина, "НепринятыеПоДате");
	
КонецПроцедуры

&НаКлиенте
Процедура НеИгнорироватьКонфликт(Команда)
	
	ИгнорироватьВерсию(Элементы.Коллизии.ВыделенныеСтроки, Ложь, "Коллизии");
	
КонецПроцедуры

&НаКлиенте
Процедура НеИгнорироватьНепринятый(Команда)
	
	ИгнорироватьВерсию(Элементы.НепринятыеПоДате.ВыделенныеСтроки, Ложь, "НепринятыеПоДате");
	
КонецПроцедуры

&НаКлиенте
Процедура ПринятьВерсиюНепринятые(Команда)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПринятьВерсиюНепринятыеЗавершение", ЭтотОбъект);
	ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Принять версию, несмотря на запрет загрузки?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
	
КонецПроцедуры

&НаКлиенте
Процедура ПринятьВерсиюНепринятыеЗавершение(Ответ, ДополнительныеПараметры) Экспорт
	
	Если Ответ <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	ОчиститьСообщения();
	
	СообщениеОбОшибке = "";
	ПринятьОтклонитьВерсиюНаСервере(Элементы.НепринятыеПоДате.ВыделенныеСтроки, "НепринятыеПоДате", СообщениеОбОшибке);
	Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
		ПоказатьПредупреждение(, СообщениеОбОшибке);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьВерсиюДоКонфликта(Команда)
	
	ОткрытьВерсиюНаКлиенте("НомерЭтойВерсии");
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьВерсиюКонфликта(Команда)
	
	ОткрытьВерсиюНаКлиенте("НомерДругойВерсии");
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьПроигнорированныеКонфликты(Команда)
	
	ПоказыватьПроигнорированныеКонфликты = Не ПоказыватьПроигнорированныеКонфликты;
	ПоказыватьПроигнорированныеКонфликтыНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьПроигнорированныеНезаполненные(Команда)
	
	ПоказыватьПроигнорированныеНезаполненные = Не ПоказыватьПроигнорированныеНезаполненные;
	ПоказыватьПроигнорированныеНезаполненныеНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьПроигнорированныеОшибки(Команда)
	
	ПоказыватьПроигнорированныеОшибки = Не ПоказыватьПроигнорированныеОшибки;
	ПоказыватьПроигнорированныеОшибкиНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьПроигнорированныеНепринятые(Команда)
	
	ПоказыватьПроигнорированныеНепринятые = Не ПоказыватьПроигнорированныеНепринятые;
	ПоказыватьПроигнорированныеНепринятыеНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьПроигнорированныеНепроведенные(Команда)
	
	ПоказыватьПроигнорированныеНепроведенные = Не ПоказыватьПроигнорированныеНепроведенные;
	ПоказыватьПроигнорированныеНепроведенныеНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьРезультатКонфликта(Команда)
	
	Если Элементы.Коллизии.ТекущиеДанные <> Неопределено Тогда
		
		Если Элементы.Коллизии.ТекущиеДанные.ДругаяВерсияПринята Тогда
			
			ТекстВопроса = НСтр("ru = 'Заменить версию, полученную из другой программы, на версию из этой программы?'");
			
		Иначе
			
			ТекстВопроса = НСтр("ru = 'Заменить версию этой программы на версию, полученную из другой программы?'");
			
		КонецЕсли;
		
		ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьРезультатКонфликтаЗавершение", ЭтотОбъект);
		ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьРезультатКонфликтаЗавершение(Ответ, ДополнительныеПараметры) Экспорт
	
	Если Ответ <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	ОчиститьСообщения();
	
	СообщениеОбОшибке = "";
	ПринятьОтклонитьВерсиюНаСервере(Элементы.Коллизии.ВыделенныеСтроки, "Коллизии", СообщениеОбОшибке);
	Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
		ПоказатьПредупреждение(, СообщениеОбОшибке);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ОбновитьОтображениеПодробногоОписанияПроблемы()
	
	Элементы.ПанельПодробноеОписание.ТекущаяСтраница = Элементы[Элементы.РезультатыОбменаДанными.ТекущаяСтраница.Имя + "ПодробноеОписание"];
	
КонецПроцедуры

&НаСервере
Функция ПодготовитьОтборыЖурналаРегистрации()
	
	УровниПредупреждений = Новый Массив();
	УровниПредупреждений.Добавить(Строка(УровеньЖурналаРегистрации.Ошибка));
	УровниПредупреждений.Добавить(Строка(УровеньЖурналаРегистрации.Предупреждение));
	
	ПараметрыОтбораЖурнала = Новый Структура;
	ПараметрыОтбораЖурнала.Вставить("СобытиеЖурналаРегистрации", ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными());
	ПараметрыОтбораЖурнала.Вставить("Уровень",                   УровниПредупреждений);   
	
	Возврат ПараметрыОтбораЖурнала;
	
КонецФункции

&НаСервере
Процедура Игнорировать(Знач ВыделенныеСтроки, Пропустить, ИмяЭлемента)
	
	Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		
		Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
			Продолжить;
		КонецЕсли;
	
		РегистрыСведений.РезультатыОбменаДанными.Игнорировать(ВыделеннаяСтрока.ПроблемныйОбъект, ВыделеннаяСтрока.ТипПроблемы, Пропустить);
	
	КонецЦикла;
	
	ОбновитьНаСервере(ИмяЭлемента);
	
КонецПроцедуры

&НаСервере
Процедура ПоказыватьПроигнорированныеКонфликтыНаСервере(Обновлять = Истина)
	
	Элементы.КоллизииПоказыватьПроигнорированныеКонфликты.Пометка = ПоказыватьПроигнорированныеКонфликты;
	
	Отбор = Коллизии.КомпоновщикНастроек.Настройки.Отбор;
	ЭлементОтбора = Отбор.ПолучитьОбъектПоИдентификатору( НастройкиОтборовДинамическихСписков.Коллизии.ВерсияПроигнорирована );
	ЭлементОтбора.ПравоеЗначение = ПоказыватьПроигнорированныеКонфликты;
	ЭлементОтбора.Использование  = Не ПоказыватьПроигнорированныеКонфликты;
	
	Если Обновлять Тогда
		ОбновитьНаСервере("Коллизии");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПоказыватьПроигнорированныеНезаполненныеНаСервере(Обновлять = Истина)
	
	Элементы.НезаполненныеРеквизитыПоказыватьПроигнорированныеНезаполненные.Пометка = ПоказыватьПроигнорированныеНезаполненные;
	
	Отбор = НезаполненныеРеквизиты.КомпоновщикНастроек.Настройки.Отбор;
	ЭлементОтбора = Отбор.ПолучитьОбъектПоИдентификатору( НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты.Пропущена );
	ЭлементОтбора.ПравоеЗначение = ПоказыватьПроигнорированныеНезаполненные;
	ЭлементОтбора.Использование  = Не ПоказыватьПроигнорированныеНезаполненные;
	
	Если Обновлять Тогда
		ОбновитьНаСервере("НезаполненныеРеквизиты");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПоказыватьПроигнорированныеОшибкиНаСервере(Обновлять = Истина)
	
	Элементы.ОшибкиОбъектаXDTOПоказыватьПроигнорированные.Пометка = ПоказыватьПроигнорированныеОшибки;
	Отбор = ОшибкиОбъектаXDTO.КомпоновщикНастроек.Настройки.Отбор;
	ЭлементОтбора = Отбор.ПолучитьОбъектПоИдентификатору( НастройкиОтборовДинамическихСписков.ОшибкиОбъектаXDTO.Пропущена );
	ЭлементОтбора.ПравоеЗначение = ПоказыватьПроигнорированныеОшибки;
	ЭлементОтбора.Использование  = Не ПоказыватьПроигнорированныеОшибки;
	
	Если Обновлять Тогда
		ОбновитьНаСервере("НезаполненныеРеквизиты");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПоказыватьПроигнорированныеНепринятыеНаСервере(Обновлять = Истина)
	
	Элементы.НепринятыеПоДатеПоказыватьПроигнорированныеНепринятые.Пометка = ПоказыватьПроигнорированныеНепринятые;
	
	Отбор = НепринятыеПоДате.КомпоновщикНастроек.Настройки.Отбор;
	ЭлементОтбора = Отбор.ПолучитьОбъектПоИдентификатору( НастройкиОтборовДинамическихСписков.НепринятыеПоДате.ВерсияПроигнорирована );
	ЭлементОтбора.ПравоеЗначение = ПоказыватьПроигнорированныеНепринятые;
	ЭлементОтбора.Использование  = Не ПоказыватьПроигнорированныеНепринятые;
	
	Если Обновлять Тогда
		ОбновитьНаСервере("НепринятыеПоДате");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПоказыватьПроигнорированныеНепроведенныеНаСервере(Обновлять = Истина)
	
	Элементы.НепроведенныеДокументыПоказыватьПроигнорированныеНепроведенные.Пометка = ПоказыватьПроигнорированныеНепроведенные;
	
	Отбор = НепроведенныеДокументы.КомпоновщикНастроек.Настройки.Отбор;
	ЭлементОтбора = Отбор.ПолучитьОбъектПоИдентификатору( НастройкиОтборовДинамическихСписков.НепроведенныеДокументы.Пропущена );
	ЭлементОтбора.ПравоеЗначение = ПоказыватьПроигнорированныеНепроведенные;
	ЭлементОтбора.Использование  = Не ПоказыватьПроигнорированныеНепроведенные;
	
	Если Обновлять Тогда
		ОбновитьНаСервере("НепроведенныеДокументы");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьВыделенные(Список)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда
		МодульГрупповоеИзменениеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ГрупповоеИзменениеОбъектовКлиент");
		МодульГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Список);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПровестиДокументы(Знач ВыделенныеСтроки, СообщениеОбОшибке = "")
	
	СчетчикВсего = 0;
	СчетчикНеПроведенные = 0;
	Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		
		Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
			Продолжить;
		КонецЕсли;
		
		СчетчикВсего = СчетчикВсего + 1;
		
		БлокировкаУстановлена = Ложь;
		
		НачатьТранзакцию();
		Попытка
			ЗаблокироватьДанныеДляРедактирования(ВыделеннаяСтрока.ПроблемныйОбъект);
			БлокировкаУстановлена = Истина;
			
			ДокументОбъект = ВыделеннаяСтрока.ПроблемныйОбъект.ПолучитьОбъект();
			
			Если ДокументОбъект.ПроверитьЗаполнение() Тогда
				ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
			Иначе
				СчетчикНеПроведенные = СчетчикНеПроведенные + 1;
			КонецЕсли;
			
			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			Если Не БлокировкаУстановлена Тогда
				ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не удалось провести документ ""%1"" по причине:
					|%2.'"),
					ВыделеннаяСтрока.ПроблемныйОбъект,
					ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())));
			КонецЕсли;
			СчетчикНеПроведенные = СчетчикНеПроведенные + 1;
		КонецПопытки;
	
	КонецЦикла;
	
	Если СчетчикНеПроведенные > 0 Тогда
		СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Не проведено документов: %1 из %2.'"),
			Формат(СчетчикНеПроведенные, "ЧН=; ЧГ=0"),
			Формат(СчетчикВсего, "ЧН=; ЧГ=0"));
	КонецЕсли;
		
	ОбновитьНаСервере("НепроведенныеДокументы");
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСписокУзлов()
	
	ОтсутствуетОбменПоПравилам  = Истина;
	ОтсутствуетОбменXDTO        = Истина;
	ОтсутствуетОбменРИБ         = Истина;
	ОтсутствуетСтандартныйОбмен = Истина;
	
	КонтекстноеОткрытие = ЗначениеЗаполнено(Параметры.УзлыОбмена);
	
	УзлыОбмена = ?(КонтекстноеОткрытие, Параметры.УзлыОбмена, МассивУзловПриНеконтекстномОткрытии());
	Элементы.УзелИнформационнойБазы.СписокВыбора.ЗагрузитьЗначения(УзлыОбмена);
	
	Для Каждого УзелОбмена Из УзлыОбмена Цикл
		
		ИмяПланаОбмена               = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбмена);
		ЭтоУзелПланаОбменаXDTO       = ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ИмяПланаОбмена);
		ЭтоУзелПланаОбменаРИБ        = ОбменДаннымиПовтИсп.ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена);
		ЭтоУзелПланаОбменаПоПравилам = ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена");
		
		Если ЭтоУзелПланаОбменаXDTO Тогда			
			ОтсутствуетОбменXDTO = Ложь;
		КонецЕсли;
		
		Если ЭтоУзелПланаОбменаПоПравилам Тогда
			ОтсутствуетОбменПоПравилам = Ложь;
		КонецЕсли;
		
		Если ЭтоУзелПланаОбменаРИБ Тогда
			ОтсутствуетОбменРИБ = Ложь;
		КонецЕсли;
		
		Если Не ЭтоУзелПланаОбменаXDTO
			И Не ЭтоУзелПланаОбменаПоПравилам 
			И Не ЭтоУзелПланаОбменаРИБ Тогда
		    ОтсутствуетСтандартныйОбмен = Ложь;
		КонецЕсли;
		
	КонецЦикла;
	
	УстановитьОтборПоУзлам(УзлыОбмена);
	СписокУзлов = Новый СписокЗначений;
	СписокУзлов.ЗагрузитьЗначения(УзлыОбмена);
	
	Если УзлыОбмена.Количество() < 2 Тогда
		
		УзелИнформационнойБазы = Неопределено;
		Элементы.УзелИнформационнойБазы.Видимость = Ложь;
		Элементы.НепроведенныеДокументыУзелИнформационнойБазы.Видимость = Ложь;
		Элементы.НезаполненныеРеквизитыУзелИнформационнойБазы.Видимость = Ложь;
		Элементы.ОшибкиОбъектаXDTOУзелИнформационнойБазы.Видимость = Ложь;
		
		Если ИспользуетсяВерсионирование Тогда
			Элементы.КоллизииАвторДругойВерсии.Видимость = Ложь;
			Элементы.НепринятыеПоДатеАвторДругойВерсии.Видимость = Ложь;
		КонецЕсли;
		
	ИначеЕсли УзлыОбмена.Количество() >= 7 Тогда
		
		Элементы.УзелИнформационнойБазы.РежимВыбораИзСписка = Ложь;
		
	КонецЕсли;
	
	Элементы.СтрокаПоиска.Видимость = Истина;
	
	Если ОтсутствуетОбменПоПравилам И ОтсутствуетОбменXDTO И ОтсутствуетСтандартныйОбмен Тогда
		
		Заголовок = НСтр("ru = 'Конфликты при синхронизации данных'");
		Элементы.СтрокаПоиска.Видимость = Ложь;
		Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы.СтраницаКоллизии;
		Элементы.РезультатыОбменаДанными.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
		
	Иначе
		
		Элементы.СтраницаОшибкиXDTO.Видимость             = Не ОтсутствуетОбменXDTO;
		Элементы.СтраницаНезаполненныеРеквизиты.Видимость = Не ОтсутствуетОбменXDTO Или Не ОтсутствуетОбменПоПравилам;
		Элементы.СтраницаНепроведенныеДокументы.Видимость = Не ОтсутствуетОбменXDTO Или Не ОтсутствуетОбменПоПравилам;		
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоУзлам(УзлыОбмена)
	
	ОтборПоУзламДокумент = ЭлементОтбораДинамическогоСписка(НепроведенныеДокументы,
		НастройкиОтборовДинамическихСписков.НепроведенныеДокументы.УзелВСписке);
	ОтборПоУзламДокумент.Использование = Истина;
	ОтборПоУзламДокумент.ПравоеЗначение = УзлыОбмена;
	
	ОтборПоУзламОбъект = ЭлементОтбораДинамическогоСписка(НезаполненныеРеквизиты,
		НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты.УзелВСписке);
	ОтборПоУзламОбъект.Использование = Истина;
	ОтборПоУзламОбъект.ПравоеЗначение = УзлыОбмена;
	
	ОтборПоУзламОбъект = ЭлементОтбораДинамическогоСписка(ОшибкиОбъектаXDTO,
		НастройкиОтборовДинамическихСписков.ОшибкиОбъектаXDTO.УзелВСписке);
	ОтборПоУзламОбъект.Использование = Истина;
	ОтборПоУзламОбъект.ПравоеЗначение = УзлыОбмена;

	
	Если ИспользуетсяВерсионирование Тогда
		
		ОтборПоУзламКоллизии = ЭлементОтбораДинамическогоСписка(Коллизии,
			НастройкиОтборовДинамическихСписков.Коллизии.АвторВСписке);
		ОтборПоУзламКоллизии.Использование = Истина;
		ОтборПоУзламКоллизии.ПравоеЗначение = УзлыОбмена;
		
		ОтборПоУзламНепринятые = ЭлементОтбораДинамическогоСписка(НепринятыеПоДате,
			НастройкиОтборовДинамическихСписков.НепринятыеПоДате.АвторВСписке);
		ОтборПоУзламНепринятые.Использование = Истина;
		ОтборПоУзламНепринятые.ПравоеЗначение = УзлыОбмена;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция МассивУзловПриНеконтекстномОткрытии()
	
	УзлыОбмена = Новый Массив;
	
	СписокПлановОбмена = ОбменДаннымиПовтИсп.ПланыОбменаБСП();
	
	Для Каждого ИмяПланаОбмена Из СписокПлановОбмена Цикл
		
		Если Не ПравоДоступа("Чтение", ПланыОбмена[ИмяПланаОбмена].ПустаяСсылка().Метаданные()) Тогда
			Продолжить;
		КонецЕсли;	
		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ТаблицаПланаОбмена.Ссылка КАК УзелОбмена
		|ИЗ
		|	&ТаблицаПланаОбмена КАК ТаблицаПланаОбмена
		|ГДЕ
		|	НЕ ТаблицаПланаОбмена.ЭтотУзел
		|	И ТаблицаПланаОбмена.Ссылка.ПометкаУдаления = ЛОЖЬ
		|
		|УПОРЯДОЧИТЬ ПО
		|	Представление";
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаПланаОбмена", "ПланОбмена." + ИмяПланаОбмена);
		
		Выборка = Запрос.Выполнить().Выбрать();
		
		Пока Выборка.Следующий() Цикл
			
			УзлыОбмена.Добавить(Выборка.УзелОбмена);
			
		КонецЦикла;
		
	КонецЦикла;
	
	Возврат УзлыОбмена;
	
КонецФункции

&НаСервере
Процедура ОбновитьОтборПоУзлу(Обновлять = Истина)
	
	Использование = ЗначениеЗаполнено(УзелИнформационнойБазы);
	
	ОтборПоУзлуДокумент = ЭлементОтбораДинамическогоСписка(НепроведенныеДокументы,
		НастройкиОтборовДинамическихСписков.НепроведенныеДокументы.УзелРавно);
	ОтборПоУзлуДокумент.Использование = Использование;
	ОтборПоУзлуДокумент.ПравоеЗначение = УзелИнформационнойБазы;
	
	ОтборПоУзлуОбъект = ЭлементОтбораДинамическогоСписка(НезаполненныеРеквизиты,
		НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты.УзелРавно);
	ОтборПоУзлуОбъект.Использование = Использование;
	ОтборПоУзлуОбъект.ПравоеЗначение = УзелИнформационнойБазы;
	
	ОтборПоУзлуОбъект = ЭлементОтбораДинамическогоСписка(ОшибкиОбъектаXDTO,
		НастройкиОтборовДинамическихСписков.ОшибкиОбъектаXDTO.УзелРавно);
	ОтборПоУзлуОбъект.Использование = Использование;
	ОтборПоУзлуОбъект.ПравоеЗначение = УзелИнформационнойБазы;

	
	Если ИспользуетсяВерсионирование Тогда
		
		ОтборПоУзлуКоллизии = ЭлементОтбораДинамическогоСписка(Коллизии,
			НастройкиОтборовДинамическихСписков.Коллизии.АвторРавно);
		ОтборПоУзлуКоллизии.Использование = Использование;
		ОтборПоУзлуКоллизии.ПравоеЗначение = УзелИнформационнойБазы;
		
		ОтборПоУзлуНепринятые = ЭлементОтбораДинамическогоСписка(НепринятыеПоДате,
			НастройкиОтборовДинамическихСписков.НепринятыеПоДате.АвторРавно);
		ОтборПоУзлуНепринятые.Использование = Использование;
		ОтборПоУзлуНепринятые.ПравоеЗначение = УзелИнформационнойБазы;
		
	КонецЕсли;
	
	Если Обновлять Тогда
		ОбновитьНаСервере();
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция КоличествоНепринятых()
	
	УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов);
	
	ПараметрыЗапроса = ОбменДаннымиСервер.ПараметрыЗапросаКоличествоПроблемВерсионирования();
	
	ПараметрыЗапроса.ЭтоКоличествоКоллизий      = Ложь;
	ПараметрыЗапроса.УчитыватьПроигнорированные = ПоказыватьПроигнорированныеНепринятые;
	ПараметрыЗапроса.Период                     = Период;
	ПараметрыЗапроса.СтрокаПоиска               = СтрокаПоиска;
	
	Возврат ОбменДаннымиСервер.КоличествоПроблемВерсионирования(УзлыОбмена, ПараметрыЗапроса);
	
КонецФункции

&НаСервере
Функция КоличествоКоллизий()
	
	УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов);
	
	ПараметрыЗапроса = ОбменДаннымиСервер.ПараметрыЗапросаКоличествоПроблемВерсионирования();
	
	ПараметрыЗапроса.ЭтоКоличествоКоллизий      = Истина;
	ПараметрыЗапроса.УчитыватьПроигнорированные = ПоказыватьПроигнорированныеКонфликты;
	ПараметрыЗапроса.Период                     = Период;
	ПараметрыЗапроса.СтрокаПоиска               = СтрокаПоиска;
	
	Возврат ОбменДаннымиСервер.КоличествоПроблемВерсионирования(УзлыОбмена, ПараметрыЗапроса);
	
КонецФункции

&НаСервере
Функция КоличествоНезаполненныхРеквизитов()
	
	УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов);
	
	ПараметрыПоиска = РегистрыСведений.РезультатыОбменаДанными.ПараметрыПоискаПроблем();
	ПараметрыПоиска.ТипПроблемы                = Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты;
	ПараметрыПоиска.УчитыватьПроигнорированные = ПоказыватьПроигнорированныеНезаполненные;
	ПараметрыПоиска.Период                     = Период;
	ПараметрыПоиска.СтрокаПоиска               = СтрокаПоиска;
	ПараметрыПоиска.УзлыПланаОбмена            = УзлыОбмена;
	
	Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(ПараметрыПоиска);
	
КонецФункции

&НаСервере
Функция КоличествоНепроведенныхДокументов()
	
	УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов);
	
	ПараметрыПоиска = РегистрыСведений.РезультатыОбменаДанными.ПараметрыПоискаПроблем();
	ПараметрыПоиска.ТипПроблемы                = Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент;
	ПараметрыПоиска.УчитыватьПроигнорированные = ПоказыватьПроигнорированныеНепроведенные;
	ПараметрыПоиска.Период                     = Период;
	ПараметрыПоиска.СтрокаПоиска               = СтрокаПоиска;
	ПараметрыПоиска.УзлыПланаОбмена            = УзлыОбмена;	
	
	Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(ПараметрыПоиска);
	
КонецФункции

&НаСервере
Функция КоличествоОшибокXDTO()
	
	УзлыОбмена = ?(ЗначениеЗаполнено(УзелИнформационнойБазы), УзелИнформационнойБазы, СписокУзлов);
	
	ПараметрыПоиска = РегистрыСведений.РезультатыОбменаДанными.ПараметрыПоискаПроблем();
	ПараметрыПоиска.ТипПроблемы                = Перечисления.ТипыПроблемОбменаДанными.ОшибкаПроверкиСконвертированногоОбъекта;
	ПараметрыПоиска.УчитыватьПроигнорированные = ПоказыватьПроигнорированныеОшибки;
	ПараметрыПоиска.Период                     = Период;
	ПараметрыПоиска.СтрокаПоиска               = СтрокаПоиска;
	ПараметрыПоиска.УзлыПланаОбмена            = УзлыОбмена;	
	
	Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(ПараметрыПоиска);
	
КонецФункции

&НаСервере
Процедура УстановитьЗаголовокСтраницы(Страница, Заголовок, Количество)
	
	ДобавочнаяСтрока = ?(Количество > 0, " (" + Количество + ")", "");
	Заголовок = Заголовок + ДобавочнаяСтрока;
	Страница.Заголовок = Заголовок;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьОбъект(Элемент)
	
	Если Элемент.ТекущаяСтрока = Неопределено Или ТипЗнч(Элемент.ТекущаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'"));
		Возврат;
	Иначе
		ПоказатьЗначение(, Элемент.ТекущиеДанные.Ссылка);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменениеОбъекта()
	
	СтраницыРезультатов = Элементы.РезультатыОбменаДанными;
	
	Если СтраницыРезультатов.ТекущаяСтраница = СтраницыРезультатов.ПодчиненныеЭлементы.СтраницаНепроведенныеДокументы Тогда
		
		ОткрытьОбъект(Элементы.НепроведенныеДокументы); 
		
	ИначеЕсли СтраницыРезультатов.ТекущаяСтраница = СтраницыРезультатов.ПодчиненныеЭлементы.СтраницаНезаполненныеРеквизиты Тогда
		
		ОткрытьОбъект(Элементы.НезаполненныеРеквизиты);
		
	ИначеЕсли СтраницыРезультатов.ТекущаяСтраница = СтраницыРезультатов.ПодчиненныеЭлементы.СтраницаОшибкиXDTO Тогда
		
		ОткрытьОбъект(Элементы.ОшибкиОбъектаXDTO); 		
		
	ИначеЕсли СтраницыРезультатов.ТекущаяСтраница = СтраницыРезультатов.ПодчиненныеЭлементы.СтраницаКоллизии Тогда
		
		ОткрытьОбъект(Элементы.Коллизии);
		
	ИначеЕсли СтраницыРезультатов.ТекущаяСтраница = СтраницыРезультатов.ПодчиненныеЭлементы.СтраницаНепринятыеПоДатеЗапрета Тогда
		
		ОткрытьОбъект(Элементы.НепринятыеПоДате);
		
	ИначеЕсли СтраницыРезультатов.ТекущаяСтраница = Элементы.СтраницаОшибкиПриВыполненииКодаОбработчиковОтправки Тогда
		
		ОткрытьОбъект(Элементы.ОшибкиПриВыполненииКодаОбработчиковОтправки);
		
	ИначеЕсли СтраницыРезультатов.ТекущаяСтраница = Элементы.СтраницаОшибкиПриВыполненииКодаОбработчиковПолучения Тогда
		
		ОткрытьОбъект(Элементы.ОшибкиПриВыполненииКодаОбработчиковПолучения);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьОтличия(Элемент)
	
	Если Элемент.ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	СравниваемыеВерсии = Новый Массив;
	
	Если Элемент.ТекущиеДанные.НомерЭтойВерсии <> 0 Тогда
		СравниваемыеВерсии.Добавить(Элемент.ТекущиеДанные.НомерЭтойВерсии);
	КонецЕсли;
	
	Если Элемент.ТекущиеДанные.НомерДругойВерсии <> 0 Тогда
		СравниваемыеВерсии.Добавить(Элемент.ТекущиеДанные.НомерДругойВерсии);
	КонецЕсли;
	
	Если СравниваемыеВерсии.Количество() <> 2 Тогда
		
		ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Нет версии для сравнения.'"));
		Возврат;
		
	КонецЕсли;
	
	ОткрытьОтчетСравненияВерсий(Элемент.ТекущиеДанные.Ссылка, СравниваемыеВерсии);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьОтборПоПричине(Обновлять = Истина)
	
	СтрокаПоискаЗадана = ЗначениеЗаполнено(СтрокаПоиска);
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		НепроведенныеДокументы, "Причина", СтрокаПоиска, ВидСравненияКомпоновкиДанных.Содержит, , СтрокаПоискаЗадана);
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		НезаполненныеРеквизиты, "Причина", СтрокаПоиска, ВидСравненияКомпоновкиДанных.Содержит, , СтрокаПоискаЗадана);
		
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		ОшибкиОбъектаXDTO, "Причина", СтрокаПоиска, ВидСравненияКомпоновкиДанных.Содержит, , СтрокаПоискаЗадана);
		
	Если ИспользуетсяВерсионирование Тогда
	
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
			НепринятыеПоДате, "ПричинаЗапрета", СтрокаПоиска, ВидСравненияКомпоновкиДанных.Содержит, , СтрокаПоискаЗадана);
		
	КонецЕсли;
	
	Если Обновлять Тогда
		ОбновитьНаСервере();
	КонецЕсли;
	
КонецПроцедуры

// Параметры:
//   ДинамическийСписок - ДинамическийСписок - объект для установки отбора.
//   НастройкаОтбора - см. НастройкаОтбораПоРезультатамОбменов
//                   - см. НастройкаОтбораПоВерсиямОбъектов
//
&НаСервере
Процедура ОбновитьОтборДинамическогоСпискаПоПериоду(ДинамическийСписок, НастройкаОтбора)
	
	Использование = ЗначениеЗаполнено(Период);
	
	ОтборПоПериодуС  = ЭлементОтбораДинамическогоСписка(ДинамическийСписок, НастройкаОтбора.ДатаНачала);
	ОтборПоПериодуПо = ЭлементОтбораДинамическогоСписка(ДинамическийСписок, НастройкаОтбора.ДатаОкончания);
		
	ОтборПоПериодуС.Использование  = Использование;
	ОтборПоПериодуПо.Использование = Использование;
	
	ОтборПоПериодуС.ПравоеЗначение  = Период.ДатаНачала;
	ОтборПоПериодуПо.ПравоеЗначение = Период.ДатаОкончания;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьОтборПоПериоду(Обновлять = Истина)
	
	// Непроведенные документы
	НастройкаОтбора = НастройкиОтборовДинамическихСписков.НепроведенныеДокументы; // см. НастройкаОтбораПоРезультатамОбменов
	ОбновитьОтборДинамическогоСпискаПоПериоду(НепроведенныеДокументы, НастройкаОтбора);
	
	// Незаполненные реквизиты
	НастройкаОтбора = НастройкиОтборовДинамическихСписков.НезаполненныеРеквизиты; // см. НастройкаОтбораПоРезультатамОбменов
	ОбновитьОтборДинамическогоСпискаПоПериоду(НезаполненныеРеквизиты, НастройкаОтбора);
	
	// Ошибки объекта XDTO
	НастройкаОтбора = НастройкиОтборовДинамическихСписков.ОшибкиОбъектаXDTO; // см. НастройкаОтбораПоРезультатамОбменов
	ОбновитьОтборДинамическогоСпискаПоПериоду(ОшибкиОбъектаXDTO, НастройкаОтбора);
	
	Если ИспользуетсяВерсионирование Тогда
		
		НастройкаОтбора = НастройкиОтборовДинамическихСписков.Коллизии; // см. НастройкаОтбораПоВерсиямОбъектов
		ОбновитьОтборДинамическогоСпискаПоПериоду(Коллизии, НастройкаОтбора);
		
		НастройкаОтбора = НастройкиОтборовДинамическихСписков.НепринятыеПоДате; // см. НастройкаОтбораПоВерсиямОбъектов
		ОбновитьОтборДинамическогоСпискаПоПериоду(НепринятыеПоДате, НастройкаОтбора);
		
	КонецЕсли;
	
	Если Обновлять Тогда
		ОбновитьНаСервере();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ИгнорироватьВерсию(Знач ВыделенныеСтроки, Игнорировать, ИмяЭлемента)
	
	Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		
		Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
			Продолжить;
		КонецЕсли;
		
		Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
			МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
			МодульВерсионированиеОбъектов.ИгнорироватьВерсиюОбъекта(ВыделеннаяСтрока.Объект,
				ВыделеннаяСтрока.НомерВерсии, Игнорировать);
		КонецЕсли;
		
	КонецЦикла;
	
	ОбновитьНаСервере(ИмяЭлемента);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьНаСервере(ОбновляемыйЭлемент = "")
	
	ОбновитьСпискиФормы(ОбновляемыйЭлемент);
	ОбновитьЗаголовкиСтраниц();
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьСпискиФормы(ОбновляемыйЭлемент)
	
	Если ЗначениеЗаполнено(ОбновляемыйЭлемент) Тогда
		
		ЭлементФормы = Элементы.Найти(ОбновляемыйЭлемент);
		Если ЭлементФормы <> Неопределено Тогда
			ЭлементФормы.Обновить();
		КонецЕсли;
		
	Иначе
		
		Элементы.НепроведенныеДокументы.Обновить();
		Элементы.НезаполненныеРеквизиты.Обновить();
		Элементы.ОшибкиОбъектаXDTO.Обновить();
		
		Если ИспользуетсяВерсионирование Тогда
			Элементы.Коллизии.Обновить();
			Элементы.НепринятыеПоДате.Обновить();
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьЗаголовкиСтраниц()
	
	УстановитьЗаголовокСтраницы(Элементы.СтраницаНепроведенныеДокументы, НСтр("ru = 'Непроведенные документы'"), КоличествоНепроведенныхДокументов());
	УстановитьЗаголовокСтраницы(Элементы.СтраницаНезаполненныеРеквизиты, НСтр("ru = 'Незаполненные реквизиты'"), КоличествоНезаполненныхРеквизитов());
	УстановитьЗаголовокСтраницы(Элементы.СтраницаОшибкиXDTO,             НСтр("ru = 'Ошибки проверки конвертируемых объектов'"), КоличествоОшибокXDTO());	
	
	Если ИспользуетсяВерсионирование Тогда
		УстановитьЗаголовокСтраницы(Элементы.СтраницаКоллизии, НСтр("ru = 'Конфликты'"), КоличествоКоллизий());
		УстановитьЗаголовокСтраницы(Элементы.СтраницаНепринятыеПоДатеЗапрета, НСтр("ru = 'Непринятые по дате запрета'"), КоличествоНепринятых());
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьВерсиюНаКлиенте(ПолеВерсия)
	
	ТекущиеДанные = ТекущиеДанныеТаблицыКоллизий();
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	СравниваемыеВерсии = Новый Массив;
	СравниваемыеВерсии.Добавить(ТекущиеДанные[ПолеВерсия]);
	ОткрытьОтчетСравненияВерсий(ТекущиеДанные.Ссылка, СравниваемыеВерсии);
	
КонецПроцедуры

// Возвращаемое значение:
//   ДанныеФормыСтруктура:
//     * Дата - Дата
//     * Ссылка - ЛюбаяСсылка
//     * ТипСтрокой - Строка
//     * НомерЭтойВерсии - Число
//     * НомерДругойВерсии - Число
//     * АвторДругойВерсии - СправочникСсылка.ВнешниеПользователи
//                         - СправочникСсылка.Пользователи
//                         - ПланОбменаСсылка
//     * ДругаяВерсияПринята - Булево
//     * ВерсияПроигнорирована - Булево
//
&НаКлиенте
Функция ТекущиеДанныеТаблицыКоллизий()
	
	Возврат Элементы.Коллизии.ТекущиеДанные;
	
КонецФункции

&НаКлиенте
Процедура ОткрытьОтчетСравненияВерсий(Ссылка, СравниваемыеВерсии)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
		МодульВерсионированиеОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВерсионированиеОбъектовКлиент");
		МодульВерсионированиеОбъектовКлиент.ОткрытьОтчетСравненияВерсий(Ссылка, СравниваемыеВерсии);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПринятьОтклонитьВерсиюНаСервере(Знач ВыделенныеСтроки, ИмяЭлемента, СообщениеОбОшибке = "")
	
	МодульВерсионированиеОбъектов = Неопределено;
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
		МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
	КонецЕсли;
	
	СчетчикВсего = 0;
	СчетчикНеПринятые = 0;
	Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
		
		Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
			Продолжить;
		КонецЕсли;
		
		СчетчикВсего = СчетчикВсего + 1;
		
		Если МодульВерсионированиеОбъектов = Неопределено Тогда
			СчетчикНеПринятые = СчетчикНеПринятые + 1;
		Иначе
			Попытка
				МодульВерсионированиеОбъектов.ПриПереходеНаВерсиюОбъекта(ВыделеннаяСтрока.Объект,
					ВыделеннаяСтрока.НомерВерсии);
			Исключение
				ПредставлениеОбъекта = ?(ОбщегоНазначения.СсылкаСуществует(ВыделеннаяСтрока.Объект),
					ВыделеннаяСтрока.Объект,
					ВыделеннаяСтрока.Объект.Метаданные());
				ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Не удалось принять версию объекта ""%1"" по причине:
					|%2.'"),
					ПредставлениеОбъекта,
					ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке())));
				СчетчикНеПринятые = СчетчикНеПринятые + 1;
			КонецПопытки;
		КонецЕсли;
		
	КонецЦикла;
	
	Если СчетчикНеПринятые > 0 Тогда
		СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Не принято версий объектов: %1 из %2.'"),
			Формат(СчетчикНеПринятые, "ЧН=; ЧГ=0"),
			Формат(СчетчикВсего, "ЧН=; ЧГ=0"));
	КонецЕсли;
	
	ОбновитьНаСервере(ИмяЭлемента);
	
КонецПроцедуры

// Параметры:
//   Отбор - ОтборКомпоновкиДанных - объект отбора.
//
// Возвращаемое значение:
//   Структура:
//     * Пропущена - ИдентификаторКомпоновкиДанных
//                 - Неопределено - идентификатор элемента компоновки.
//     * ДатаНачала - ИдентификаторКомпоновкиДанных
//                  - Неопределено - идентификатор элемента компоновки.
//     * ДатаОкончания - ИдентификаторКомпоновкиДанных
//                     - Неопределено - идентификатор элемента компоновки.
//     * УзелРавно - ИдентификаторКомпоновкиДанных
//                 - Неопределено - идентификатор элемента компоновки.
//     * Причина - ИдентификаторКомпоновкиДанных
//               - Неопределено - идентификатор элемента компоновки.
//     * УзелВСписке - ИдентификаторКомпоновкиДанных
//                   - Неопределено - идентификатор элемента компоновки.
//
&НаСервере
Функция НастройкаОтбораПоРезультатамОбменов(Отбор)
	
	Настройка = Новый Структура;
	
	Настройка.Вставить("Пропущена", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Пропущена", ВидСравненияКомпоновкиДанных.Равно, Ложь, ,Истина)));
	Настройка.Вставить("ДатаНачала", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ДатаВозникновения", ВидСравненияКомпоновкиДанных.БольшеИлиРавно, '00010101', , Истина)));
	Настройка.Вставить("ДатаОкончания", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ДатаВозникновения", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, '00010101', , Истина)));
	Настройка.Вставить("УзелРавно", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "УзелИнформационнойБазы", ВидСравненияКомпоновкиДанных.Равно, Неопределено, , Ложь)));
	Настройка.Вставить("Причина", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Причина", ВидСравненияКомпоновкиДанных.Содержит, Неопределено, , Ложь)));
	Настройка.Вставить("УзелВСписке", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "УзелИнформационнойБазы", ВидСравненияКомпоновкиДанных.ВСписке, Неопределено, , Ложь)));
		
	Возврат Настройка;
	
КонецФункции

// Параметры:
//   Отбор - ОтборКомпоновкиДанных - объект отбора.
//   ОтборПоПричине - Булево - Истина, если в настройку необходимо включить отбор по причине проблемы.
//
// Возвращаемое значение:
//   Структура:
//     * АвторРавно - ИдентификаторКомпоновкиДанных
//                  - Неопределено - идентификатор элемента компоновки.
//     * ДатаНачала - ИдентификаторКомпоновкиДанных
//                  - Неопределено - идентификатор элемента компоновки.
//     * ДатаОкончания - ИдентификаторКомпоновкиДанных
//                     - Неопределено - идентификатор элемента компоновки.
//     * ВерсияПроигнорирована - ИдентификаторКомпоновкиДанных
//                             - Неопределено - идентификатор элемента компоновки.
//     * АвторВСписке - ИдентификаторКомпоновкиДанных
//                    - Неопределено - идентификатор элемента компоновки.
//     * ПричинаЗапрета - ИдентификаторКомпоновкиДанных
//                      - Неопределено - (необязательное) идентификатор элемента компоновки.
//
&НаСервере
Функция НастройкаОтбораПоВерсиямОбъектов(Отбор, ОтборПоПричине = Ложь)
	
	Настройка = Новый Структура;
	
	Настройка.Вставить("АвторРавно", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "АвторДругойВерсии", ВидСравненияКомпоновкиДанных.Равно, Неопределено, ,Ложь)));
	Настройка.Вставить("ДатаНачала", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Дата", ВидСравненияКомпоновкиДанных.БольшеИлиРавно, '00010101', , Истина)));
	Настройка.Вставить("ДатаОкончания", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Дата", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, '00010101', , Истина)));
	Настройка.Вставить("ВерсияПроигнорирована", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ВерсияПроигнорирована", ВидСравненияКомпоновкиДанных.Равно, Ложь, , Истина)));
	Настройка.Вставить("АвторВСписке", Отбор.ПолучитьИдентификаторПоОбъекту(
		ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "АвторДругойВерсии", ВидСравненияКомпоновкиДанных.ВСписке, Неопределено, ,Ложь)));
		
	Если ОтборПоПричине Тогда
		Настройка.Вставить("ПричинаЗапрета", Отбор.ПолучитьИдентификаторПоОбъекту(
			ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ПричинаЗапрета", ВидСравненияКомпоновкиДанных.Равно, Неопределено, , Ложь)));
	КонецЕсли;
		
	Возврат Настройка;
	
КонецФункции

// Возвращаемое значение:
//   Структура:
//     * НепроведенныеДокументы - см. НастройкаОтбораПоРезультатамОбменов
//     * НезаполненныеРеквизиты - см. НастройкаОтбораПоРезультатамОбменов
//     * ОшибкиОбъектаXDTO - см. НастройкаОтбораПоРезультатамОбменов
//     * Коллизии - см. НастройкаОтбораПоВерсиямОбъектов
//     * НепринятыеПоДате - см. НастройкаОтбораПоВерсиямОбъектов
//
&НаСервере
Функция НастройкиОтборовДинамическихСписков()
	
	Результат = Новый Структура;
	
	// Непроведенные документы
	Отбор = НепроведенныеДокументы.КомпоновщикНастроек.Настройки.Отбор;
	Результат.Вставить("НепроведенныеДокументы", НастройкаОтбораПоРезультатамОбменов(Отбор));
		
	// Незаполненные реквизиты
	Отбор = НезаполненныеРеквизиты.КомпоновщикНастроек.Настройки.Отбор;
	Результат.Вставить("НезаполненныеРеквизиты", НастройкаОтбораПоРезультатамОбменов(Отбор));
		
	// Ошибки XDTO
	Отбор = ОшибкиОбъектаXDTO.КомпоновщикНастроек.Настройки.Отбор;
	Результат.Вставить("ОшибкиОбъектаXDTO", НастройкаОтбораПоРезультатамОбменов(Отбор));
		
	Если ИспользуетсяВерсионирование Тогда
		
		// Конфликты
		Отбор = Коллизии.КомпоновщикНастроек.Настройки.Отбор;
		Результат.Вставить("Коллизии", НастройкаОтбораПоВерсиямОбъектов(Отбор));
		
		// Непринятые по дате запрета
		Отбор = НепринятыеПоДате.КомпоновщикНастроек.Настройки.Отбор;
		Результат.Вставить("НепринятыеПоДате", НастройкаОтбораПоВерсиямОбъектов(Отбор, Истина));
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаСервереБезКонтекста
Функция ЭлементОтбораДинамическогоСписка(Знач ДинамическийСписок, Знач Идентификатор)
	Возврат ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор.ПолучитьОбъектПоИдентификатору(Идентификатор);
КонецФункции

&НаСервере
Процедура ОбновитьОтборыИПроигнорированные()
	
	ОбновитьОтборПоПериоду(Ложь);
	ОбновитьОтборПоУзлу(Ложь);
	ОбновитьОтборПоПричине(Ложь);
	
	ПоказыватьПроигнорированныеНепроведенныеНаСервере(Ложь);
	ПоказыватьПроигнорированныеНезаполненныеНаСервере(Ложь);
	ПоказыватьПроигнорированныеОшибкиНаСервере(Ложь);
	
	Если ИспользуетсяВерсионирование Тогда
		ПоказыватьПроигнорированныеКонфликтыНаСервере(Ложь);
		ПоказыватьПроигнорированныеНепринятыеНаСервере(Ложь);
	КонецЕсли;
	
	ОбновитьНаСервере();
	
	Если Не Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы.СтраницаКоллизии Тогда
		
		Для Каждого Страница Из Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы Цикл
			
			Если СтрНайти(Страница.Заголовок, "(") Тогда
				Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Страница;
				Прервать;
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	// Непроведенные документы.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НепроведенныеДокументы.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НепроведенныеДокументы.Пропущена");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	
	СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект,
		"НепроведенныеДокументы.ДатаДокумента",
		Элементы.НепроведенныеДокументыДатаДокумента.Имя);
	
	// Коллизии.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Коллизии.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Коллизии.ВерсияПроигнорирована");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	
	// Коллизии, другая версия принята, цвет текста.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КоллизииДругаяВерсияПринята.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Коллизии.ВерсияПроигнорирована");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Коллизии.ДругаяВерсияПринята");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НепринятаяВерсия);
	
	// Коллизии, другая версия принята, текст.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КоллизииДругаяВерсияПринята.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Коллизии.НомерДругойВерсии");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Удалена'"));
	
	// Незаполненные реквизиты.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НезаполненныеРеквизиты.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НезаполненныеРеквизиты.Пропущена");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	
	// Ошибки конвертации XDTO.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОшибкиОбъектаXDTO.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОшибкиОбъектаXDTO.Пропущена");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	
	
	// Непринятые по дате.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НепринятыеПоДате.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НепринятыеПоДате.ВерсияПроигнорирована");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	
	// Непринятые по дате, ссылка.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НепринятыеПоДатеСсылка.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НепринятыеПоДате.НовыйОбъект");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Отсутствуют'"));
	
	// Непринятые по дате.
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НепринятыеПоДатеАвторДругойВерсии.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НепринятыеПоДате.ВерсияПроигнорирована");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НепринятаяВерсия);
	
КонецПроцедуры

#КонецОбласти